Skip to content

Use quoted identifiers by default using R2DBC #2066

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from

Conversation

schauder
Copy link
Contributor

@schauder schauder commented Jun 2, 2025

Most are test more or less obvious test fixes.

Interesting things that became obvious:

  • SpEL expressions get the transformed (e.g. upper case) and quoted table name!? See TableNameQueryPreoprocessorUnitTests
  • The RenderContextFactor has a NamingStrategy!? That sounds all wrong to me. See PostgresDialectRenderingUnitTests

Removed IdentifierProcessing from PostgresLockClause since it was cause circular dependencies between class constructions.

Closes #1993

Supersedes #2047

Copy link
Member

@mp911de mp911de left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Several tests in JDBC are broken by this change

[ERROR]   PartTreeJdbcQueryUnitTests.wrapsLikeOperatorParameterWithPercentSymbolsForNotContainingQuery:478 
expected: "SELECT "users"."ID" AS "ID", "users"."AGE" AS "AGE", "users"."ACTIVE" AS "ACTIVE", "users"."LAST_NAME" AS "LAST_NAME", "users"."FIRST_NAME" AS "FIRST_NAME", "users"."DATE_OF_BIRTH" AS "DATE_OF_BIRTH", "users"."HOBBY_REFERENCE" AS "HOBBY_REFERENCE", "hated"."NAME" AS "HATED_NAME", "users"."USER_CITY" AS "USER_CITY", "users"."USER_STREET" AS "USER_STREET" FROM "users" LEFT OUTER JOIN "HOBBY" "hated" ON "hated"."USERS" = "users"."ID" WHERE "users"."FIRST_NAME" NOT LIKE :first_name"
 but was: "SELECT "USERS"."ID" AS "ID", "USERS"."AGE" AS "AGE", "USERS"."ACTIVE" AS "ACTIVE", "USERS"."LAST_NAME" AS "LAST_NAME", "USERS"."FIRST_NAME" AS "FIRST_NAME", "USERS"."DATE_OF_BIRTH" AS "DATE_OF_BIRTH", "USERS"."HOBBY_REFERENCE" AS "HOBBY_REFERENCE", "HATED"."NAME" AS "HATED_NAME", "USERS"."USER_CITY" AS "USER_CITY", "USERS"."USER_STREET" AS "USER_STREET" FROM "USERS" LEFT OUTER JOIN "HOBBY" "HATED" ON "HATED"."USERS" = "USERS"."ID" WHERE "USERS"."FIRST_NAME" NOT LIKE :FIRST_NAME"
[ERROR] Errors: 
[ERROR]   JdbcRepositoryCreateIfNotFoundLookUpStrategyTests.derivedQueryShouldWork:50->AbstractJdbcRepositoryLookUpStrategyTests.callDerivedQuery:72 » InvalidDataAccessApiUsage No value supplied for the SQL parameter 'NAME': No value registered for key 'NAME'
[ERROR]   JdbcRepositoryCreateLookUpStrategyTests.declaredQueryShouldWork:45->AbstractJdbcRepositoryLookUpStrategyTests.callDeclaredQuery:60 » InvalidDataAccessApiUsage No value supplied for the SQL parameter 'NAME': No value registered for key 'NAME'
[ERROR]   JdbcRepositoryCreateLookUpStrategyTests.derivedQueryShouldWork:51->AbstractJdbcRepositoryLookUpStrategyTests.callDerivedQuery:72 » InvalidDataAccessApiUsage No value supplied for the SQL parameter 'NAME': No value registered for key 'NAME'

@schauder schauder force-pushed the issue/1993-force-quoting branch from 2b4b8fe to f0a0031 Compare June 24, 2025 11:21
schauder added a commit that referenced this pull request Jun 24, 2025
Most are test more or less obvious test fixes.

Interesting things that became obvious:

- SpEL expressions get the transformed (e.g. upper case) and quoted table name!? See TableNameQueryPreprocessorUnitTests and
SqlInspectingR2dbcRepositoryUnitTests

Closes #1993
Original pull request #2066
Copy link
Member

@mp911de mp911de left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I generally wonder about our testing approach. Enabling quoting requires downstream changes to every test we have where we interact with tables or verify SQL. The way table and column names are represented in the tests is a function of quoting and identifier processing.

How about having a set of test (like the dialect-specific ones in r2dbc.convert and the Template tests) that make use of quoted identifiers. For all other cases, we could disable quoting and keep tests as they are.

Quoting introduces another level of complexity while the verifications we run have a different semantic subject.

Most tests got fixed by reverting to non quoted identifiers for the test.

Interesting things that became obvious:

- SpEL expressions get the transformed (e.g. upper case) and quoted table name!? See TableNameQueryPreprocessorUnitTests and
SqlInspectingR2dbcRepositoryUnitTests

Closes #1993
Original pull request #2066
@schauder schauder force-pushed the issue/1993-force-quoting branch from f0a0031 to 6b2a7f7 Compare July 3, 2025 08:42
@schauder
Copy link
Contributor Author

schauder commented Jul 3, 2025

I just pushed a new version of the PR.

@mp911de mp911de added the type: enhancement A general enhancement label Jul 3, 2025
Introduce factory methods to create mapping contexts that use quoting and that use plain identifiers for easier creation of the correct mapping context.
@mp911de mp911de force-pushed the issue/1993-force-quoting branch from 73b8096 to 972bed0 Compare July 3, 2025 12:18
mp911de pushed a commit that referenced this pull request Jul 3, 2025
Most tests got fixed by reverting to non quoted identifiers for the test.

Interesting things that became obvious:

- SpEL expressions get the transformed (e.g. upper case) and quoted table name!? See TableNameQueryPreprocessorUnitTests and
SqlInspectingR2dbcRepositoryUnitTests

Closes #1993
Original pull request #2066
mp911de added a commit that referenced this pull request Jul 3, 2025
Introduce factory methods to create mapping contexts that use quoting and that use plain identifiers for easier creation of the correct mapping context.

See #1993
Original pull request #2066
@mp911de mp911de changed the title By default R2DBC uses quoted identifiers Use quoted identifiers by default using R2DBC Jul 3, 2025
@mp911de
Copy link
Member

mp911de commented Jul 3, 2025

That's merged and polished now.

@mp911de mp911de closed this Jul 3, 2025
@mp911de mp911de deleted the issue/1993-force-quoting branch July 3, 2025 13:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: enhancement A general enhancement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Use force-quoting in R2dbcMappingContext by default
2 participants